package chapter03

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
/**
 * @author: 余辉
 * @blog: https://blog.csdn.net/silentwolfyh
 * descriptions:
 * date: 2024 - 09 - 01 11:45 上午
 *
 * 需求：
 * 1.创建SparkContext
 * 2.创建RDD
 * 3.调用RDD的Transformation（s）方法
 * 4.调用Action
 * 5.释放资源
 */
object WordCount {

  def main(args: Array[String]): Unit = {

    val conf: SparkConf = new SparkConf().setAppName("WordCount").setMaster("local[*]")
    //创建SparkContext，使用SparkContext来创建RDD
    val sc: SparkContext = new SparkContext(conf)
    //spark写Spark程序，就是对抽象的神奇的大集合【RDD】编程，调用它高度封装的API
    //使用SparkContext创建RDD
    val lines: RDD[String] = sc.textFile("BookData/exercise/用户登录/loginUser.csv")

    //Transformation 开始 //
    //切分压平
    val words: RDD[String] = lines.flatMap(_.split(","))
    //将单词和一组合放在元组中
    val wordAndOne: RDD[(String, Int)] = words.map((_, 1))
    //分组聚合，reduceByKey可以先局部聚合再全局聚合
    val reduced: RDD[(String, Int)] = wordAndOne.reduceByKey(_+_)
    //排序
    val sorted: RDD[(String, Int)] = reduced.sortBy(_._2, false)
    //Transformation 结束 //

    //调用Action将计算结果保存到HDFS中
    sorted.saveAsTextFile("BookData/output/03/wordcount")
    //释放资源
    sc.stop()
  }
}